#ifndef DATOCLAVE_H_
#define DATOCLAVE_H_

#include "../Objeto.h"
#include "../Bytes.h"

class DatoClave: public Objeto {
public:

	/*
	 * Pre: -
	 * Pos: Crea una nueva instancia.
	 */
	DatoClave();

	/*
	 * Pre: -
	 * Pos: Libera los recursos instanciados.
	 */
	virtual ~DatoClave();

	/* Definicion de operadores de comparacion */
	virtual bool operator==(const DatoClave& otro)const = 0;
	virtual bool operator<(const DatoClave& otro)const = 0;
	virtual bool operator>(const DatoClave& otro)const = 0;
	virtual bool operator<=(const DatoClave& otro)const = 0;

	/*
	 * Pre: -
	 * Pos: devuelve bytes con el objeto serializado.
	 */
	virtual Bytes serializarse() = 0;

	/*
	 * Pre: -
	 * Pos: Hidrata el estado del objeto.
	 */
	virtual bool hidratarse(const Bytes&) = 0;
	virtual std::string toString()const = 0;
	/*
	 * Pre: -
	 * Pos: Crea una copia del objeto.
	 */
	virtual DatoClave* getCopia() = 0;
};

#endif /* DATOCLAVE_H_ */
